package com.example.d7_method_references;

/**
 * 目标：构造器引用(理解语法)
 */
public class Test3 {
    public static void main(String[] args) {
        // 1.创建一个接口的匿名内部类对象
//        CreateCar cc = new CreateCar() {
//            @Override
//            public Car create(String name, double price) {
//                return new Car(name, price);
//            }
//        };

        // Lambda表达式化简 省略数据类型
//        CreateCar cc = (name, price) -> {
//            return new Car(name, price);
//        };

        // CreateCar cc = (name, price) -> new Car(name, price);

        // 构造器引用化简
        CreateCar cc = Car::new;

        // 对象调用方法
        Car c = cc.create("BMW", 100000);
        System.out.println(c);
    }
}

// 因为方法引用是基于Lambda表达式简化的,所以也要按照Lambda表达式的使用前提来用,需要一个函数式接口,接口中代码的返回值类型是Car类型
interface CreateCar {
    Car create(String name, double price);
}
